home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Day Cry
/
Day Cry CD.bin
/
oh_towns
/
taropyon
/
silib
/
silib.lzh
/
PRG
/
SDKMENU
/
SDKMENU.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-01-09
|
13KB
|
528 lines
/*************************************************************************
* SIDEWORK MENU
*************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <msdos.cf>
#include <egb.h>
#include <mos.h>
#include <kkstr2.h>
#include <sidework.h>
#include <siapl.h>
#include <silib.h>
#include <sisdk.h>
#include <SDK/blkdlg.h>
#include <sifs.h>
#include <kbcode.h>
#include "sdkmenu.h"
#define TITLE_DLG "SIDEWORK MENU"
#define SBATT (SB_ATT_VERTICAL | SB_ATT_MAXADJUST | SB_ATT_DRAGSLD | SB_ATT_BTNREP)
#define NUMDSPMAX (14) /* ò\ĪÉö */
#define YSMENU (14) /* ìÇû┌é╠ÅcâhâbâgÉö(14 or 16) */
#if YSMENU == 16
# define _KEY_FTS (SiFts->ftsSt1)
# define _MSG_FTS (SiFts->ftsSs1)
#endif
#if YSMENU == 14
# define _KEY_FTS (SiFts->ftsSh1)
# define _MSG_FTS (SiFts->ftsSs1)
#endif
int evNoCancel;
int evNoCurup;
int evNoCurdown;
int evNoExec;
#define SDKEV_CANCEL (evNoCancel)
#define SDKEV_EXIT SDKEV_CANCEL
#define SDKEV_CURUP (evNoCurup)
#define SDKEV_CURDOWN (evNoCurdown)
#define SDKEV_EXEC (evNoExec)
extern int sdk_exec(int);
extern int sdk_getNumProg(void);
extern int sdk_getProgNameLen(int);
extern int sdk_getProgName(int,char *,char *);
extern int sdk_isExist(void);
char *SkeyTbl;
int SdkExec( int no )
{
int ret;
if ( sdk_isAtWork() )
{ /* âTâCâhâÅü[âNïNô«Æå */
sdk_chain( no + 1);
} else
{ /* Æ╩ÅφâAâvâèâPü[âVâçâô */
ret = sdk_exec( no + 1);
sdk_control(0);
}
return (ret);
}
/*************************************************************************
* âvâìâOâëâÇû╝é╠ò\Ī
*************************************************************************/
void sdkdsp_prog( SDKDLG_T *sdkDlg, int pos )
{
int i;
int x1 = sdkDlg->frScn.x1;
int x2 = sdkDlg->frScn.x2;
LAYER_T *ly = SiScn->layerCrt;
if ( sdkDlg->sb )
{ /* âXâNâìü[âïâoü[É▌ÆΦ ----------------------------------------*/
SB_T *sb = sdkDlg->sb;
sb->top = sdkDlg->posDspTop;
}
MOS_DEC();
for ( i = 0; i < sdkDlg->numDsp; ++i )
{
int p;
p = sdkDlg->posDspTop + i;
if ( pos < 0 || pos == p )
{
int y;
y = sdkDlg->frScn.y1 + 2 + i*YSMENU;
if ( sdkDlg->posDspTop + i < sdkDlg->numProg )
{
COLOR_T col, bac, c1, c2, strcol;
int xx1, yy1, xx2, yy2;
if ( sdkDlg->posSel != i )
{
col = ly->col.black;
bac = ly->col.gray;
c1 = ly->col.lgray;
c2 = ly->col.dark;
strcol = ly->col.black;
} else
{
col = ly->col.gray;
bac = ly->col.black;
c1 = ly->col.dark;
c2 = ly->col.lgray;
strcol = ly->colTbl[8+2];
}
xx1 = x1 + 2 + 8 + 2;
yy1 = y;
xx2 = x2 - 2;
yy2 = y + YSMENU - 1;
{
char tmp[128], key[2];
sdk_getProgName( p+1, tmp, key );
key[1] = '\0';
if ( !SkeyTbl[p] )
strcol = ly->col.gray;
SCN_BOXF(x1+2,yy1,xx1-1,yy2,PSET,ly->col.white);
#if YSMENU == 14
SCN_PUTS(_KEY_FTS,key,x1+2+1,y+(YSMENU-_KEY_FTS->fntYs+2)/2+1,OPAQUE,ly->col.lgray,ly->col.white);
SCN_PUTS(_KEY_FTS,key,x1+2 ,y+(YSMENU-_KEY_FTS->fntYs+2)/2 ,PSET ,strcol ,ly->col.white);
#else
SCN_PUTS(_KEY_FTS,key,x1+2+1,y+(YSMENU-_KEY_FTS->fntYs+1)/2+1,OPAQUE,ly->col.lgay ,ly->col.white);
SCN_PUTS(_KEY_FTS,key,x1+2 ,y+(YSMENU-_KEY_FTS->fntYs+1)/2 ,PSET ,strcol ,ly->col.white);
#endif
SCN_BOXFCON(xx1,yy1,xx2,yy2,1,PSET,bac,c1,c2);
{
int xs, ys;
FTS_chkPutSize( _MSG_FTS, &xs, &ys, tmp );
SCN_PUTS(_MSG_FTS,tmp,(xx1+2+xx2-2-xs+1)/2,(yy1+yy2+1-ys)/2,OPAQUE,col,bac);
}
}
if ( pos < 0 )
{
EV_SETBTN1(sdkDlg->evDsp, i, p, sdkDlg, 0,
NULL, EVSW_LEFT,xx1,yy1,xx2,yy2,1,c1,c2);
}
} else
{
SCN_BOXF(x1+1,y,x2-1,y+15,PSET,ly->col.white);
if ( pos < 0 )
EV_datUnset( sdkDlg->evDsp, i);
}
if ( pos == p )
break;
}
}
MOS_INC();
}
static int sdkEvFunc_cursor( int evNo, EVDAT_T *evdat )
{
SDKDLG_T *sdkDlg = evdat->ptr;
if ( evNo == SDKEV_CURUP )
{
if ( sdkDlg->posSel < 0 )
{
sdkDlg->posSel = sdkDlg->numDsp - 1;
sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + sdkDlg->posSel );
} else
{ if ( sdkDlg->posSel == 0 && sdkDlg->posDspTop > 0 )
{
--sdkDlg->posDspTop;
sdkdsp_prog( sdkDlg, -1 );
if ( sdkDlg->sb )
SB_vUpdate( sdkDlg->sb );
} else if ( sdkDlg->posSel > 0 )
{
sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + (sdkDlg->posSel--) );
sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + sdkDlg->posSel );
}
}
} else if ( evNo == SDKEV_CURDOWN )
{
if ( sdkDlg->posSel < 0 )
{
sdkDlg->posSel = 0;
sdkdsp_prog( sdkDlg, sdkDlg->posDspTop );
} else
{ if ( sdkDlg->posSel == sdkDlg->numDsp - 1 && sdkDlg->posDspTop < sdkDlg->numProg - sdkDlg->numDsp )
{
++sdkDlg->posDspTop;
sdkdsp_prog( sdkDlg, -1 );
if ( sdkDlg->sb )
SB_vUpdate( sdkDlg->sb );
} else if ( sdkDlg->posSel < sdkDlg->numDsp - 1 )
{
sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + (sdkDlg->posSel++) );
sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + sdkDlg->posSel );
}
}
} else if ( evNo == SDKEV_EXEC )
{
if ( sdkDlg->posSel >= 0 )
return (sdkDlg->posDspTop + sdkDlg->posSel);
}
return (EV_BREAK);
}
static int sdkFunc_sbar( int evNo, SB_T *sb )
{
SDKDLG_T *sdkDlg = sb->ptr;
if ( sdkDlg->posDspTop == sb->top )
return (EV_NOTHING);
sdkDlg->posDspTop = sb->top;
sdkdsp_prog( sdkDlg, -1 );
return (EV_NOTHING);
}
void sdkFunc_dlgdsp( BLKDLG_T *dlg )
{
SDKDLG_T *sdkDlg = dlg->ptr;
int x1 = dlg->rect.x0 + 2;
int y1 = dlg->rect.y0 + 2;
int x2 = dlg->rect.x0 + dlg->rect.xs - 1 - 2;
int y2 = dlg->rect.y0 + dlg->rect.ys - 1 - 2;
EV_T *ev = sdkDlg->ev;
int evPos = 0;
void *win = NULL;
LAYER_T *ly = SiScn->layerCrt;
CONST COLOR_T sha = ly->col.dark, hil = ly->col.white;
sdkDlg->fr.x1 = x1;
sdkDlg->fr.y1 = y1;
sdkDlg->fr.x2 = x2;
sdkDlg->fr.y2 = y2;
/* âNâìü[âYâ{â^âô ------------------------------------------------*/
{
CONST int xx1 = x1 , yy1 = y1;
CONST int xx2 = x1+15, yy2 = y1+15;
SCN_PUTIMGPTN( &Ptn16x16_close, xx1, yy1, OPAQUE, ly->col.black,ly->col.gray);
SCN_BOXCON(xx1,yy1,xx2,yy2,1,PSET,hil, sha);
EV_SETBTN1(ev,evPos++, SDKEV_EXIT, sdkDlg, 0,
win, EVSW_LEFT,xx1,yy1,xx2,yy2,1,hil,sha);
}
/* â^âCâgâï --------------------------------------------------------*/
{
CONST int xx1 = x1 + 16, yy1 = y1;
CONST int xx2 = x2 , yy2 = y1 + 15;
static CONST char *title = TITLE_DLG;
SCN_BOXFCON(xx1,yy1,xx2,yy2,1,PSET,ly->col.gray,hil,sha);
EV_SETFR(ev,evPos++, 0, dlg,BlkDlgMoveEvFunc,win,EVSW_LEFT,
xx1, yy1, xx2, yy2);
SCN_PUTS(SiFts->ftsSs2,title,xx1+3,yy1+3,OPAQUE,ly->col.white,ly->col.gray);
SCN_PUTS(SiFts->ftsSs2,title,xx1+2,yy1+2,PSET ,ly->col.black,ly->col.gray);
}
{ /* âvâìâOâëâÇêΩùùò\Ī ----------------------------------------*/
CONST int xx1 = x1 + 2;
CONST int yy1 = y1 + 16 + 2;
CONST int xx2 = x1 + 2 + sdkDlg->xsDsp - 1;
CONST int yy2 = yy1 + (2+YSMENU*sdkDlg->numDsp+2) -1;
sdkDlg->frScn.x1 = xx1;
sdkDlg->frScn.y1 = yy1;
sdkDlg->frScn.x2 = xx2;
sdkDlg->frScn.y2 = yy2;
SCN_BOXFCON(xx1,yy1,xx2,yy2,1,PSET,ly->col.white,ly->col.dark,ly->col.gray);
}
if ( sdkDlg->sb )
{ /* âXâNâìü[âïâoü[ --------------------------------------------*/
SB_T *sb = sdkDlg->sb;
FRAME_T fr;
fr.x1 = sdkDlg->frScn.x2 + 2;
fr.y1 = sdkDlg->frScn.y1;
fr.x2 = x2 - 2;
fr.y2 = sdkDlg->frScn.y2;
SB_vDsp( sb, &fr );
}
/* âvâìâOâëâÇêΩùùé╠ò\Ī --------------------------------------------*/
sdkdsp_prog( sdkDlg, -1 );
/* âJü[â\âïâLü[ùpâCâxâôâg ----------------------------------------*/
EV_SETKON1( ev,evPos++, SDKEV_CURUP ,sdkDlg,sdkEvFunc_cursor, win,0xFFFF,KA_UP );
EV_SETKON1( ev,evPos++, SDKEV_CURDOWN,sdkDlg,sdkEvFunc_cursor, win,0xFFFF,KA_DOWN );
EV_SETKON1( ev,evPos++, SDKEV_EXEC ,sdkDlg,sdkEvFunc_cursor, win,